package com.qst.service;

import com.qst.pojo.dto.CreateOrderDTO;
import com.qst.pojo.entity.Order;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 订单服务接口
 */
public interface OrderService {
    
    /**
     * 创建订单（旧版本，保留兼容性）
     * @param order 订单信息
     * @return 创建的订单
     */
    Order createOrder(Order order);
    
    /**
     * 创建订单（新版本，使用DTO）
     * @param createOrderDTO 订单创建DTO
     * @param customerId 客户ID
     * @return 创建的订单详情
     */
    Map<String, Object> createOrderFromDTO(CreateOrderDTO createOrderDTO, Integer customerId);
    
    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param newStatus 新状态
     * @return 更新后的订单
     */
    Order updateOrderStatus(Integer orderId, Order.OrderStatus newStatus);
    
    /**
     * 获取所有订单
     * @return 订单列表
     */
    List<Order> getAllOrders();
    
    /**
     * 根据ID获取订单
     * @param orderId 订单ID
     * @return 订单
     */
    Order getOrderById(Integer orderId);
    
    /**
     * 获取站点订单列表
     * @param stationId 站点ID
     * @param status 订单状态（可选）
     * @param page 页码
     * @param pageSize 每页大小
     * @return 订单列表及总数
     */
    Map<String, Object> getStationOrders(Integer stationId, String status, Integer page, Integer pageSize);
    
    /**
     * 获取客户订单列表
     * @param customerId 客户ID
     * @param status 订单状态（可选）
     * @param page 页码
     * @param pageSize 每页大小
     * @return 订单列表及总数
     */
    Map<String, Object> getCustomerOrders(Integer customerId, String status, Integer page, Integer pageSize);
    
    /**
     * 获取订单统计信息
     * @param stationId 站点ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计信息
     */
    Map<String, Object> getOrderStats(Integer stationId, LocalDate startDate, LocalDate endDate);
    
    /**
     * 获取订单详情（包含订单项）
     * @param orderId 订单ID
     * @return 订单详情VO
     */
    Map<String, Object> getOrderDetail(Integer orderId);
}


